import Vue from 'vue';

var MTA_CONFIG = {
  app_id: '',
  event_id: '',
  api_base: 'https://pingtas.qq.com/pingd',
  prefix: '_mta_',
  version: '1.3.10',
  stat_share_app: !1,
  stat_pull_down_fresh: !1,
  stat_reach_bottom: !1,
  stat_param: !0,
};

function getNetworkType(a) {
  wx.getNetworkType({
    success: function(b) {
      a(b.networkType);
    },
  });
}

function getSystemInfo() {
  var a = wx.getSystemInfoSync();
  return {
    adt: encodeURIComponent(a.model),
    scl: a.pixelRatio,
    scr: a.windowWidth + 'x' + a.windowHeight,
    lg: a.language,
    fl: a.version,
    jv: encodeURIComponent(a.system),
    tz: encodeURIComponent(a.platform),
  };
}

function getUID() {
  try {
    return wx.getStorageSync(MTA_CONFIG.prefix + 'auid');
  } catch (a) {}
}

function setUID() {
  try {
    var a = getRandom();
    wx.setStorageSync(MTA_CONFIG.prefix + 'auid', a);
    return a;
  } catch (b) {}
}

function getSID() {
  try {
    return wx.getStorageSync(MTA_CONFIG.prefix + 'ssid');
  } catch (a) {}
}

function setSID() {
  try {
    var a = 's' + getRandom();
    wx.setStorageSync(MTA_CONFIG.prefix + 'ssid', a);
    return a;
  } catch (b) {}
}

function getRandom(a) {
  for (var b = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], c = 10; 1 < c; c--) {
    var d = Math.floor(10 * Math.random()),
      f = b[d];
    b[d] = b[c - 1];
    b[c - 1] = f;
  }
  for (c = d = 0; 5 > c; c++) d = 10 * d + b[c];
  return (a || '') + (d + '' + +new Date());
}

function getPagePath() {
  try {
    var a = getCurrentPages(),
      b = '/';
    0 < a.length && (b = a.pop().__route__);
    return b;
  } catch (c) {
    console.log('get current page path error:' + c);
  }
}

function getMainInfo() {
  var a = {
    dm: 'wechat.apps.xx',
    url: encodeURIComponent(getPagePath() + getQuery(MTA.Data.pageQuery)),
    pvi: '',
    si: '',
    ty: 0,
  };
  a.pvi = (function() {
    var b = getUID();
    b || ((b = setUID()), (a.ty = 1));
    return b;
  })();
  a.si = (function() {
    var a = getSID();
    a || (a = setSID());
    return a;
  })();
  return a;
}

function getBasicInfo() {
  var a = getSystemInfo();
  getNetworkType(function(a) {
    try {
      wx.setStorageSync(MTA_CONFIG.prefix + 'ntdata', a);
    } catch (c) {}
  });
  a.ct = wx.getStorageSync(MTA_CONFIG.prefix + 'ntdata') || '4g';
  return a;
}

function getExtentInfo() {
  var a = MTA.Data.userInfo;
  var b = [],
    c;
  for (c in a) a.hasOwnProperty(c) && b.push(c + '=' + a[c]);
  a = b.join(';');
  return {
    r2: MTA_CONFIG.app_id,
    r4: 'wx',
    ext:
      'v=' +
      MTA_CONFIG.version +
      (null !== a && '' !== a ? ';ui=' + encodeURIComponent(a) : ''),
  };
}

function getQuery(a) {
  if (!MTA_CONFIG.stat_param || !a) return '';
  a = ignoreParams(a);
  var b = [],
    c;
  for (c in a) b.push(c + '=' + a[c]);
  return 0 < b.length ? '?' + b.join('&') : '';
}

function ignoreParams(a) {
  if (1 > MTA_CONFIG.ignore_params.length) return a;
  var b = {},
    c;
  for (c in a) 0 <= MTA_CONFIG.ignore_params.indexOf(c) || (b[c] = a[c]);
  return b;
}

// function initOnload() {
//   var a = Page;
//   Page = function (b) {
//     var c = b.onLoad;
//     b.onLoad = function (a) {
//       c && c.call(this, a);
//       MTA.Data.lastPageQuery = MTA.Data.pageQuery;
//       MTA.Data.pageQuery = a;
//       MTA.Data.lastPageUrl = MTA.Data.pageUrl;
//       MTA.Data.pageUrl = getPagePath();
//       MTA.Data.show = !1;
//       MTA.Page.init()
//     };
//     a(b)
//   }
// }

function initOnload() {
  // 重写 Vue.prototype.__call_hook 方法
  Vue.prototype.__call_hook_proxy = Vue.prototype.__call_hook;
  Vue.prototype.__call_hook = function(hook, args) {
    if (hook === 'onLoad') {
      MTA.Data.lastPageQuery = MTA.Data.pageQuery;
      MTA.Data.pageQuery = args;
      MTA.Data.lastPageUrl = MTA.Data.pageUrl;
      MTA.Data.pageUrl = getPagePath();
      MTA.Data.show = !1;
      MTA.Page.init();
    }
    return this.__call_hook_proxy(hook, args);
  };
}

var MTA = {
  App: {
    init: function(a) {
      'appID' in a && (MTA_CONFIG.app_id = a.appID);
      'eventID' in a && (MTA_CONFIG.event_id = a.eventID);
      'statShareApp' in a && (MTA_CONFIG.stat_share_app = a.statShareApp);
      'statPullDownFresh' in a &&
        (MTA_CONFIG.stat_pull_down_fresh = a.statPullDownFresh);
      'statReachBottom' in a &&
        (MTA_CONFIG.stat_reach_bottom = a.statReachBottom);
      'ignoreParams' in a && (MTA_CONFIG.ignore_params = a.ignoreParams);
      'statParam' in a && (MTA_CONFIG.stat_param = a.statParam);
      setSID();
      try {
        'lauchOpts' in a &&
          ((MTA.Data.lanchInfo = a.lauchOpts),
          (MTA.Data.lanchInfo.landing = 1));
      } catch (b) {}
      'autoReport' in a && a.autoReport && initOnload();
    },
  },
  Page: {
    init: function() {
      var a = getCurrentPages()[getCurrentPages().length - 1];
      a.onShow &&
        !(function() {
          var b = a.onShow;
          a.onShow = function() {
            if (!0 === MTA.Data.show) {
              var a = MTA.Data.lastPageQuery;
              MTA.Data.lastPageQuery = MTA.Data.pageQuery;
              MTA.Data.pageQuery = a;
              MTA.Data.lastPageUrl = MTA.Data.pageUrl;
              MTA.Data.pageUrl = getPagePath();
            }
            MTA.Data.show = !0;
            MTA.Page.stat();
            b.apply(this, arguments);
          };
        })();
      MTA_CONFIG.stat_pull_down_fresh &&
        a.onPullDownRefresh &&
        !(function() {
          var b = a.onPullDownRefresh;
          a.onPullDownRefresh = function() {
            MTA.Event.stat(MTA_CONFIG.prefix + 'pulldownfresh', {
              url: a.__route__,
            });
            b.apply(this, arguments);
          };
        })();
      MTA_CONFIG.stat_reach_bottom &&
        a.onReachBottom &&
        !(function() {
          var b = a.onReachBottom;
          a.onReachBottom = function() {
            MTA.Event.stat(MTA_CONFIG.prefix + 'reachbottom', {
              url: a.__route__,
            });
            b.apply(this, arguments);
          };
        })();
      MTA_CONFIG.stat_share_app &&
        a.onShareAppMessage &&
        !(function() {
          var b = a.onShareAppMessage;
          a.onShareAppMessage = function() {
            MTA.Event.stat(MTA_CONFIG.prefix + 'shareapp', {
              url: a.__route__,
            });
            return b.apply(this, arguments);
          };
        })();
    },
    multiStat: function(a, b) {
      if (1 == b) MTA.Page.stat(a), !0;
      else {
        var c = getCurrentPages()[getCurrentPages().length - 1];
        c.onShow &&
          !(function() {
            var b = c.onShow;
            c.onShow = function() {
              MTA.Page.stat(a);
              b.call(this, arguments);
            };
          })();
      }
    },
    stat: function(a) {
      if ('' != MTA_CONFIG.app_id) {
        var b = [],
          c = getExtentInfo();
        a && (c.r2 = a);
        a = [getMainInfo(), c, getBasicInfo()];
        if (MTA.Data.lanchInfo) {
          a.push({ ht: MTA.Data.lanchInfo.scene });
          MTA.Data.pageQuery &&
            MTA.Data.pageQuery._mta_ref_id &&
            a.push({ rarg: MTA.Data.pageQuery._mta_ref_id });
          try {
            1 == MTA.Data.lanchInfo.landing &&
              ((c.ext += ';lp=1'), (MTA.Data.lanchInfo.landing = 0));
          } catch (e) {}
        }
        a.push({
          rdm: '/',
          rurl:
            0 >= MTA.Data.lastPageUrl.length
              ? MTA.Data.pageUrl + getQuery(MTA.Data.lastPageQuery)
              : encodeURIComponent(
                  MTA.Data.lastPageUrl + getQuery(MTA.Data.lastPageQuery)
                ),
        });
        a.push({ rand: +new Date() });
        c = 0;
        for (var d = a.length; c < d; c++)
          for (var f in a[c])
            a[c].hasOwnProperty(f) &&
              b.push(f + '=' + ('undefined' == typeof a[c][f] ? '' : a[c][f]));
        wx.request({
          url: MTA_CONFIG.api_base + '?' + b.join('&').toLowerCase(),
        });
      }
    },
  },
  Event: {
    stat: function(a, b) {
      if ('' != MTA_CONFIG.event_id) {
        var c = [],
          d = getMainInfo(),
          f = getExtentInfo();
        d.dm = 'wxapps.click';
        d.url = a;
        f.r2 = MTA_CONFIG.event_id;
        var e = 'undefined' === typeof b ? {} : b;
        var k = [],
          g;
        for (g in e)
          e.hasOwnProperty(g) &&
            k.push(encodeURIComponent(g) + '=' + encodeURIComponent(e[g]));
        e = k.join(';');
        f.r5 = e;
        e = 0;
        d = [d, f, getBasicInfo(), { rand: +new Date() }];
        for (f = d.length; e < f; e++)
          for (var h in d[e])
            d[e].hasOwnProperty(h) &&
              c.push(h + '=' + ('undefined' == typeof d[e][h] ? '' : d[e][h]));
        wx.request({
          url: MTA_CONFIG.api_base + '?' + c.join('&').toLowerCase(),
        });
      }
    },
  },
  Data: {
    userInfo: null,
    lanchInfo: null,
    pageQuery: null,
    lastPageQuery: null,
    pageUrl: '',
    lastPageUrl: '',
    show: !1,
  },
};
module.exports = MTA;
